package models

import (
	"gorm.io/gorm"
	"video-srv/basic/config"
)

// 用户表
type User struct {
	gorm.Model
	Username   string `gorm:"type:varchar(30);comment:'用户名'"`
	Password   string `gorm:"type:varchar(32);comment:'密码'"`
	VideoCount int    `gorm:"type:int;default:0;comment:'视频数量'"`
	LikeCount  int    `gorm:"type:int;default:0;comment:'点赞数'"`
}

func (u *User) TableName() string {
	return "user"
}

// 根据username获取用户信息
func (u *User) GetUserInfo(username string) error {
	return config.DB.Model(&User{}).Where("username = ?", username).Limit(1).Find(&u).Error
}

// 根据id获取用户
func (u *User) GetUserById(db *gorm.DB, id int64) error {
	return db.Model(&User{}).Where("id = ?", id).Limit(1).Find(&u).Error
}

// 创建用户
func (u *User) CreateUser() error {
	return config.DB.Create(&u).Error
}

// 更新用户发布视频数量
func (u *User) UpdateVideoCount(db *gorm.DB, id int64) error {
	return db.Model(&User{}).Debug().Where("id = ?", id).Update("video_count", gorm.Expr("video_count + ?", 1)).Find(&u).Error
}

// 更新用户点赞量
func (u *User) UpdateUserLikeCount(db *gorm.DB, id int64) error {
	return db.Model(&User{}).Where("id = ?", id).Update("like_count", gorm.Expr("like_count + ?", 1)).Find(&u).Error
}

// 取消用户点赞量
func (u *User) DelUserLikeCount(db *gorm.DB, id int64) error {
	return db.Model(&User{}).Where("id = ?", id).Update("like_count", gorm.Expr("like_count - ?", 1)).Find(&u).Error
}

// 查询用户点赞总数
func (u *User) GetUserLikeCount(db *gorm.DB, id int64) error {
	return db.Model(&User{}).Debug().
		Select("like_count").Group("like_count").
		Where("id = ?", id).Find(&u).Error
}
